#ifndef __HARDWARE_STM32F10x_H_
#define __HARDWARE_STM32F10x_H_
#include "stm32f10x.h"

/****************************************************************************************************
 @name	SYS_DEV_CLOCKTypeDef
 
 @brief 枚举了所有的APB1 APB2寄存器

 @notes

****************************************************************************************************/
typedef enum
{
    // APB1外设
    DEV_CEC = 0x000 + 30,   // 第30位
    DEV_DAC = 0x000 + 29,   // 第29位
    DEV_PWR = 0x000 + 28,   // 第28位
    DEV_BKP = 0x000 + 27,   // 第27位
    DEV_CAN2 = 0x000 + 26,  // 第26位
    DEV_CAN1 = 0x000 + 25,  // 第25位
    DEV_USBF = 0x000 + 23,  // 第23位
    DEV_I2C2 = 0x000 + 22,  // 第22位
    DEV_I2C1 = 0x000 + 21,  // 第21位
    DEV_UART5 = 0x000 + 20, // 第20位
    DEV_UART4 = 0x000 + 19, // 第19位
    DEV_USART3 = 0x000 + 18,// 第18位
    DEV_USART2 = 0x000 + 17,// 第17位
    DEV_SPI3 = 0x000 + 15,  // 第15位
    DEV_SPI2 = 0x000 + 14,  // 第14位
    DEV_WWDG = 0x000 + 11,  // 第11位
    DEV_TIM14 = 0x000 + 8,  // 第8位
    DEV_TIM13 = 0x000 + 7,  // 第7位
    DEV_TIM12 = 0x000 + 6,  // 第6位
    DEV_TIM7 = 0x000 + 5,   // 第5位
    DEV_TIM6 = 0x000 + 4,   // 第4位
    DEV_TIM5 = 0x000 + 3,   // 第3位
    DEV_TIM4 = 0x000 + 2,   // 第2位
    DEV_TIM3 = 0x000 + 1,   // 第1位
    DEV_TIM2 = 0x000 + 0,   // 第0位

    // APB2外设
    DEV_TIM11 = 0x100 + 21,     // 第21位
    DEV_TIM10 = 0x100 + 20,     // 第20位
    DEV_TIM9 = 0x100 + 19,      // 第19位
    DEV_TIM17 = 0x100 + 18,     // 第18位
    DEV_TIM16 = 0x100 + 17,     // 第17位
    DEV_TIM15 = 0x100 + 16,     // 第16位
    DEV_ADC3 = 0x100 + 15,      // 第15位
    DEV_USART1 = 0x100 + 14,    // 第14位
    DEV_TIM8 = 0x100 + 13,      // 第13位
    DEV_SPI1 = 0x100 + 12,      // 第12位
    DEV_TIM1 = 0x100 + 11,      // 第11位
    DEV_ADC2 = 0x100 + 10,      // 第10位
    DEV_ADC1 = 0x100 + 9,       // 第9位
    DEV_GPIOG = 0x100 + 8,      // 第8位
    DEV_GPIOF = 0x100 + 7,      // 第7位
    DEV_GPIOE = 0x100 + 6,      // 第6位
    DEV_GPIOD = 0x100 + 5,      // 第5位
    DEV_GPIOC = 0x100 + 4,      // 第4位
    DEV_GPIOB = 0x100 + 3,      // 第3位
    DEV_GPIOA = 0x100 + 2,      // 第2位
    DEV_AFIO = 0x100 + 0        // 第0位
} SYS_DEV_CLOCKTypeDef;


// 工作模式枚举
typedef enum {
    GPIO_MODE_INPUT,        // 输入模式
    GPIO_MODE_OUTPUT_PP,    // 推挽输出
    GPIO_MODE_OUTPUT_OD,    // 开漏输出
    GPIO_MODE_AF_PP,        // 复用推挽
    GPIO_MODE_AF_OD,        // 复用开漏
    GPIO_MODE_ANALOG        // 模拟模式
} SYS_GPIO_MODE;

//IO驱动模式选择
typedef enum
{
    GPIO_Low_Drv	=	0,		//低驱动能力
    GPIO_Mid_Drv	=	1,		//中驱动能力
    GPIO_High_Drv	=	2,		//高驱动能力
}SYS_GPIO_DRV;

// 引脚状态枚举
typedef enum {
    GPIO_PIN_FLOATING,     // 浮空
    GPIO_PIN_PULLUP,       // 上拉
    GPIO_PIN_PULLDOWN      // 下拉
} GPIO_PinStatus;

typedef enum
{
    JTAG_MODE		=	0,	//使能全功能JTAG模式
    SWD_MODE		=	1,	//使能SWD模式
    DISABLE_JTAG	=	2,	//关闭模式
}SYS_JTAG_MODE;



//外部中断触发设置
typedef enum
{
    EXTI_NULL_EDGE	=	0,	//关闭触发
    EXTI_POS_EDGE	=	1,	//上升沿
    EXTI_NEG_EDGE	=	2,	//下升沿
    EXTI_BOTH_EDGE	=	3,	//双边沿
}EXTI_EDGE_TYPE;

//中断与事件线触发电平设置
typedef enum
{
    EIRQ_NEG_EDGE		=	0,	//下升沿
    EIRQ_POS_EDGE		=	1,	//上升沿
    EIRQ_BOTH_EDGE		=	2,	//双边沿
    EIRQ_LOW_LEVEL		=	3,	//低电平
}EIRQ_EDGE_TYPE;

//中断控制器的数字滤波设置
typedef enum
{
    IRQ_FILTER_PCLK3	=	0,	//滤波器采样时钟=PCLK3
    IRQ_FILTER_PCLK3_8	=	1,	//滤波器采样时钟=PCLK3/8
    IRQ_FILTER_PCLK3_32	=	2,	//滤波器采样时钟=PCLK3/32
    IRQ_FILTER_PCLK3_64	=	3,	//滤波器采样时钟=PCLK3/64
    IRQ_FILTER_DISABLE	=	4,	//滤波器关闭
}EIRQ_FILTER_TYPE;

#endif

